home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Net / Utilities / Seer family 2.0 / sr_da.src / sd_main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-11-18  |  2.3 KB  |  121 lines  |  [TEXT/KAHL]

  1. /*
  2.     seer desk accessory main routine
  3. */
  4.  
  5. #include "sd.h"
  6. #include <DeviceMgr.h>
  7. #include "localDeviceMgr.h"        /*get a real cntrlParam definition*/
  8.  
  9. /*
  10.     format of the control parameter for a desk accessory
  11. */
  12. struct da_menu_rec_R {
  13.     int a_menu;
  14.     int a_item;
  15. };
  16. typedef struct da_menu_rec_R da_menu_rec;
  17.  
  18. typedef struct {
  19.     cntrlParam_header    nc_cp;
  20.     union {
  21.         EventRecord    *nc_event;
  22.         da_menu_rec nc_item;
  23.         }x;
  24. } XX_ctl;
  25.  
  26. /*this isn't really a routine, the address of the seer data is stored
  27.    (patched into) here when seer starts up
  28. */
  29. void real_sr_a4()
  30. {asm {
  31.     dc.l 0            /*0 means that the storage isn't setup yet*/
  32.     }
  33. };
  34.  
  35. void load_global_rtn()
  36. {asm{    lea real_sr_a4,GLOBAL_REG 
  37.         move.l (GLOBAL_REG),GLOBAL_REG}
  38. }
  39.  
  40. /*define the LightspeedC entry parameters for main*/
  41. #define LS_open        0
  42. #define LS_prime    1
  43. #define LS_control    2
  44. #define LS_status    3
  45. #define LS_close    4
  46.  
  47. /*
  48.     LightSpeedC arranges for all device driver calls to come here.
  49.     The 'entry' parameter specifies the type of call.
  50. */
  51. int main(XX_ctl *,DCtlPtr,int);
  52. int main(pb, dce, entry)
  53. register XX_ctl *pb;
  54. register DCtlPtr dce;
  55. register int entry;
  56. {asm {                    /*setup a pointer to our global data*/
  57.     lea real_sr_a4,a0     /*save data pointer for interrupt routines*/
  58.     move.l a4,(a0)
  59.     };
  60.  mydce=dce;
  61.  gl.bomb_active=0;            /*fatal error handler is not active*/
  62.  if(setjmp(gl.seer_exit_lngjmp)!=0)    /*set a place to throw errors*/
  63.   return noErr;        /*quit the device*/
  64.  /*handle the different device driver entry points*/
  65.  switch(entry) {
  66.  case LS_control:
  67.     {register int err,op;
  68.     GrafPtr save_port;
  69.     extern we_are_open;
  70.     if(!we_are_open)    /*ignore control calls if open went wrong */
  71.      break;
  72.     GetPort(&save_port);
  73.     SetPort(CUR_WINDOW);
  74.     op=pb->nc_cp.csCode;
  75.     switch(op) {
  76.     case accRun:
  77.         check_paks_in_Q();
  78.         scope_tick();
  79.         break;
  80.     case accEvent:
  81.         do_event(pb->x.nc_event);
  82.         break;
  83.     case accCursor:
  84.         break;
  85.     case goodBye:
  86.         do_close();
  87.         break;
  88.     case accMenu:
  89.         do_seer_menu(pb->x.nc_item.a_item);
  90.         break;
  91.     case killCode:
  92.     case accUndo:
  93.     case accCut:
  94.     case accCopy:
  95.     case accPaste:
  96.     case accClear:
  97.         break;
  98.     default:
  99.         break;
  100.     }
  101.     SetPort(save_port);
  102.      return noErr;
  103.     break;
  104.      }
  105.  case LS_open:
  106.     return do_open();
  107.     break;
  108. case LS_prime:
  109.     return -19;            /*we shouldn't get read/writes*/ 
  110.      break;
  111. case LS_status:
  112.     return -18;        /*we shouldn't get status errors*/
  113.      break;
  114.  case LS_close:
  115.     do_close();
  116.      break;
  117.  default:
  118.      ;
  119.  }
  120.  return noErr;
  121. }